package org.azmat.demoredis.Redis.RedisTemplate;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.HashMap;
import java.util.Map;

@SpringBootTest
public class RedisOpsForHash {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void testHash1() {
        redisTemplate.opsForHash().put("user:1", "name", "azmat");
        redisTemplate.opsForHash().put("user:1", "age", "22");
        // 读取
        System.out.println(redisTemplate.opsForHash().entries("user:1"));
    }

    @Test
    void testHash2() {
        // 测试Hash类型，putAll方法，将整个hashmap存入redis
        Map<String, Object> map = new HashMap<>();
        map.put("name", "azmat");
        map.put("age", "22");
        redisTemplate.opsForHash().putAll("user:2", map);
        // 读取
        System.out.println(redisTemplate.opsForHash().entries("user:2"));
    }

    @Test
    void testHash3() {
        // 测试keys方法，获取所有键的集合。
        redisTemplate.opsForHash().put("user:3", "name", "azmat");
        redisTemplate.opsForHash().put("user:3", "age", "22");
        System.out.println(redisTemplate.opsForHash().keys("user:3"));   // 获取所有键的集合
    }

    @Test
    void testHash4() {
        // 测试values方法，获取所有值的集合。
        redisTemplate.opsForHash().put("user:4", "name", "azmat");
        redisTemplate.opsForHash().put("user:4", "age", "22");
        System.out.println(redisTemplate.opsForHash().values("user:4"));   // 获取所有值的集合
    }

    @Test
    void testHash5() {
        /**
         * Long size(H h)方法：返回指定键中字段的数量。
         * Boolean hasKey(H h,Object o)方法：查找指定键中是否包含某个字段。
         * Long delete(H h,Object object)方法：删除指定键中的某个字段。
         */
        redisTemplate.opsForHash().put("user:5", "name", "azmat");
        redisTemplate.opsForHash().put("user:5", "age", "22");
        System.out.println(redisTemplate.opsForHash().size("user:5"));   // 获取指定键中字段的数量
        System.out.println(redisTemplate.opsForHash().hasKey("user:5", "name"));  // 查找指定键中是否包含某个字段
        System.out.println(redisTemplate.opsForHash().delete("user:5", "name"));  // 删除指定键中的某个字段
        System.out.println(redisTemplate.opsForHash().entries("user:5"));   // 获取指定键中字段的数量
    }
}
